`
https://leetcode.cn/problems/flood-fill/
`

/**
 * @param {number[][]} image
 * @param {number} sr
 * @param {number} sc
 * @param {number} color
 * @return {number[][]}
 */
var floodFill = function (image, sr, sc, color) {
  const m = image.length
  const n = image[0].length
  const visited = Array.from({ length: m }).fill(null).map(() => new Array(n).fill(false))
  // 原始颜色
  const rawColor = image[sr][sc]

  const traverse = (x, y) => {
    // 如果越界或已经访问过，或者颜色不匹配，则返回
    if (visited[x][y] || image[x][y] !== rawColor) return

    // 填充颜色
    image[x][y] = color
    visited[x][y] = true

    // 递归访问四个方向
    if (x > 0) traverse(x - 1, y)
    if (y > 0) traverse(x, y - 1)
    if (x < m - 1) traverse(x + 1, y)
    if (y < n - 1) traverse(x, y + 1)
  }

  traverse(sr, sc)

  return image
};